﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using produccion.clases;
using System.Windows.Input;
using System.Windows;
using System.Collections.ObjectModel;
using System.ComponentModel;
using produccion.modelo;
using produccion.AccesoDatos;
using System.Diagnostics;
using System.Collections.Specialized;
using System.Windows.Controls;
using System.Globalization;
using System.Windows.Media.Imaging;
using System.Data;
using produccion.reportes;

namespace produccion.vistamodelo
{
    public class VMCumplimientoPedidos : ViewModelBase
    {
        #region Campos
            private ProcesoProduccionRepositorio _repositorio = new ProcesoProduccionRepositorio();//Guarda los metodos que tienen los SP
            private CLSMAEREF _Refencia = new CLSMAEREF();
            private CLSMAECLIP _Clientes = new CLSMAECLIP();
            private string strAuxCliente = "";
            private string strAuxReferencia = "";
            private string strAuxColor = "";
            private string strAuxOrden = "";

            string strPmtCodigoClienteInicial;
            string strPmtCodigoClienteFinal;
            DateTime dtmPmtFechaInicial;
            DateTime dtmPmtFechaFinal;

        #endregion
        #region Constructor
            public VMCumplimientoPedidos()
            {
                try
                {
                    if (MDOgeneral.conexion == null || MDOgeneral.conexion.State == ConnectionState.Closed)
                    {
                        MDOgeneral.conectar();
                    }
                    strTituloVentana = "INFORME CUMPLIMIENTO PEDIDOS" + " - Usuario: " + MDOgeneral.usuario + " - [FrmCumplimientoPedidos]";

                    DateTime dtmFecha = DateTime.Now;
                    dtmFechaInicial = dtmFecha.AddDays(-30);
                    dtmFechaFinal = dtmFecha;

                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
        #endregion
        #region Interfaces publicas (Propiedades)
            //CODIGO TITULO DEL FORMULARIO
            private string _strTituloVentada;
            public string strTituloVentana
            {
                get { return _strTituloVentada; }
                set
                {
                    _strTituloVentada = value; base.OnPropertyChanged("strTituloVentana");
                }
            }
            //CLIENTE
            public string strCodigoCliente
            {
                get { return _Clientes.CODCLI_CLI; }
                set
                {
                    _Clientes.CODCLI_CLI = value;
                    _Clientes.consultar();
                    if (_Clientes.EXISTE == true)
                    {
                        strNombreCliente = _Clientes.NOMCLI_CLI;
                        Consultar();
                    }
                    else
                    {
                        if (strNombreReferencia == "No exite" || strCodigoReferencia == null)
                        {
                            VMFotoReferencia.strCodigo = "";
                        }
                        if (_Clientes.CODCLI_CLI.Length == 0)
                        {
                            Consultar();
                            strNombreCliente = "";
                        }
                        else
                        {
                            strNombreCliente = "No existe";
                        }
                    }
                    base.OnPropertyChanged("strCodigoCliente");
                    base.OnPropertyChanged("strNombreCliente");
                }
            }
            private string _strNombreCliente;
            public string strNombreCliente
            {
                get { return _strNombreCliente; }
                set
                { _strNombreCliente = value; base.OnPropertyChanged("strNombreCliente"); }
            }
            //REFERENCIA
            public string strCodigoReferencia
            {
                get { return _Refencia.CODREF_REF; }
                set
                {
                    _Refencia.CODREF_REF = value;
                    _Refencia.Consultar();
                    if (_Refencia.EXISTE == true)
                    {
                        strNombreReferencia = _Refencia.NOMREF_REF;
                        VMFotoReferencia.strCodigo = _Refencia.CODREF_REF;
                        Consultar();
                    }
                    else
                    {
                        VMFotoReferencia.strCodigo = "";
                        if (_Refencia.CODREF_REF.Length == 0)
                        {
                            Consultar();
                            strNombreReferencia = "";
                        }
                        else
                        {
                            strNombreReferencia = "No existe";
                        }
                    }
                    base.OnPropertyChanged("strCodigoReferencia");
                    base.OnPropertyChanged("strNombreReferencia");
                }
            }
            private string _strNombreReferencia;
            public string strNombreReferencia
            {
                get { return _strNombreReferencia; }
                set
                { _strNombreReferencia = value; base.OnPropertyChanged("strNombreReferencia"); }
            }
            //FECHA INICIAL
            private DateTime _dtmFechaInicial;
            public DateTime dtmFechaInicial
            {
                get { return _dtmFechaInicial; }
                set
                {
                    _dtmFechaInicial = value;
                    Consultar();
                    base.OnPropertyChanged("dtmFechaInicial"); 
                }
            }
            //FECHA FINAL
            private DateTime _dtmFechaFinal;
            public DateTime dtmFechaFinal
            {
                get { return _dtmFechaFinal; }
                set
                {
                    _dtmFechaFinal = value;
                    Consultar();
                    base.OnPropertyChanged("dtmFechaFinal");
                }
            }
            //FECHA IMAGEN
            private VMvisorFotoReferencia _VMFotoReferencia = new VMvisorFotoReferencia();
            public VMvisorFotoReferencia VMFotoReferencia
            {
                get { return _VMFotoReferencia; }
                set
                { _VMFotoReferencia = value; base.OnPropertyChanged("VMFotoReferencia"); }
            }
            //
            private List<MCumplimientoPedidos> _LisCumplimientoPedidos;
            public List<MCumplimientoPedidos> LisCumplimientoPedidos
            {
                get { return _LisCumplimientoPedidos; }
                set
                { _LisCumplimientoPedidos = value; base.OnPropertyChanged("LisCumplimientoPedidos"); }
            }
            private VmCumplimientoPedidos _selLisCumplimientoPedidos = new VmCumplimientoPedidos();
            public VmCumplimientoPedidos selLisCumplimientoPedidos
            {
                get { return _selLisCumplimientoPedidos; }
                set 
                {
                    _selLisCumplimientoPedidos = value;
                    if (_selLisCumplimientoPedidos != null)
                    {
                        VMFotoReferencia.strCodigo = _selLisCumplimientoPedidos.CODREF_DOP;
                        VMFotoReferencia.strColor = _selLisCumplimientoPedidos.CODCOL_DOP;
                        base.OnPropertyChanged("selLisCumplimientoPedidos");
                        base.OnPropertyChanged("VMFotoReferencia"); 
                    }
                }
            }
            private ObservableCollection<VmCumplimientoPedidos> _lisCumplimientoPedidos = new ObservableCollection<VmCumplimientoPedidos>();
            public ObservableCollection<VmCumplimientoPedidos> lisCumplimientoPedidos
            {
                get { return _lisCumplimientoPedidos; }
                set { _lisCumplimientoPedidos = value; base.OnPropertyChanged("lisCumplimientoPedidos"); }
            }
        #endregion
        #region Comandos
            RelayCommand _cmdSalir;
            public ICommand cmdSalir
            {
                get
                {
                    if (_cmdSalir == null)
                    {
                        _cmdSalir = new RelayCommand(Salir);
                    }
                    return _cmdSalir;
                }
            }
            RelayCommand _cmdImprimir;
            public ICommand cmdImprimir
            {
                get
                {
                    if (_cmdImprimir == null)
                    {
                        _cmdImprimir = new RelayCommand(x => imprimir());
                    }
                    return _cmdImprimir;
                }
            }
        #endregion
        #region Metodos
            private void Consultar()
            {
                if (strCodigoCliente != null)
                {
                    if (_Clientes.CODCLI_CLI.Length == 3)
                    {
                        LisCumplimientoPedidos = _repositorio.consultarCumplimientoPedidos(_Clientes.CODCLI_CLI, _Clientes.CODCLI_CLI, dtmFechaInicial, dtmFechaFinal);

                        strPmtCodigoClienteInicial = _Clientes.CODCLI_CLI;
                        strPmtCodigoClienteFinal = _Clientes.CODCLI_CLI;
                        dtmPmtFechaInicial = dtmFechaInicial;
                        dtmPmtFechaFinal = dtmFechaFinal;
                    }
                    else
                    {
                        LisCumplimientoPedidos = _repositorio.consultarCumplimientoPedidos("   ", "ZZZ", dtmFechaInicial, dtmFechaFinal);

                        strPmtCodigoClienteInicial = "   ";
                        strPmtCodigoClienteFinal = "ZZZ";
                        dtmPmtFechaInicial = dtmFechaInicial;
                        dtmPmtFechaFinal = dtmFechaFinal;
                    }
                }
                else
                {
                    LisCumplimientoPedidos = _repositorio.consultarCumplimientoPedidos("   ", "ZZZ", dtmFechaInicial, dtmFechaFinal);

                    strPmtCodigoClienteInicial = "   ";
                    strPmtCodigoClienteFinal = "ZZZ";
                    dtmPmtFechaInicial = dtmFechaInicial;
                    dtmPmtFechaFinal = dtmFechaFinal;
                }
                List<VmCumplimientoPedidos> all = (from CumplimientoPedido in LisCumplimientoPedidos select new VmCumplimientoPedidos(CumplimientoPedido)).ToList();
                strAuxCliente = "";
                strAuxReferencia = "";
                strAuxColor = "";
                strAuxOrden = "";
                foreach (VmCumplimientoPedidos a in all)
                {
                    if (a.CODCLI_EOP != strAuxCliente)
                    {
                        strAuxCliente = a.CODCLI_EOP;
                        a.logRepiteCliente = true;
                    }
                    else
                        a.logRepiteReferencia = false;
                    if (a.NOMREF_REF != strAuxReferencia)
                    {
                        strAuxReferencia = a.NOMREF_REF;
                        a.logRepiteReferencia = true;
                    }
                    else
                        a.logRepiteReferencia = false;

                    if (a.NOMCOL_COL != strAuxColor)
                    {
                        strAuxColor = a.NOMCOL_COL;
                        a.logRepiteColor = true;
                    }
                    else
                        a.logRepiteColor = false;
                    if (a.NROORD_DOP != strAuxOrden)
                    {
                        strAuxOrden = a.NROORD_DOP;
                        a.logRepiteOrden = true;
                    }
                }

                lisCumplimientoPedidos = new ObservableCollection<VmCumplimientoPedidos>(all);
            }
             public void Salir(Object frmformulario)
            {
                ((Window)frmformulario).Close();
            }
             private string ValidarDato(string StrCampo, string StrDato)
             {
                 if (StrCampo == "No existe")
                 {
                     //StrDato = ""; //Se quita para que pase los parametros como se envian directamente si se va a enviar al informe vacio solo quitar comentario
                 }
                 return StrDato;
             }
             private void imprimir()
             {
                 try
                 {
                    //FJRF - ESTOS SON LOS MISMOS PARAMETROS QUE VAN EL EL SP
                    DataTable dtParametros = new DataTable("DtbParametros");
                    dtParametros.Columns.Add("StrCodigoCliente", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("StrCodigoReferencia", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("StrFechaDesde", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("StrFechaHasta", System.Type.GetType("System.String"));

                    DataRow drParametros;
                    drParametros = dtParametros.NewRow();
                    drParametros["StrCodigoCliente"] = strPmtCodigoClienteInicial;
                    drParametros["StrCodigoReferencia"] = strPmtCodigoClienteFinal;
                    drParametros["StrFechaDesde"] = dtmPmtFechaInicial;
                    drParametros["StrFechaHasta"] = dtmPmtFechaFinal;

                    dtParametros.Rows.Add(drParametros);

                    DataTable dtImp = new DataTable("DtbCumplimientoPedidos");
                    dtImp.Columns.Add("CODCLI_EOP");
                    dtImp.Columns.Add("NOMCLI_CLI");
                    dtImp.Columns.Add("NROPED_EOP");
                    dtImp.Columns.Add("NROORD_DOP");
                    dtImp.Columns.Add("FECPED_TMP");
                    dtImp.Columns.Add("FECENT_TMP");
                    dtImp.Columns.Add("DIAS");
                    dtImp.Columns.Add("CODREF_DOP");
                    dtImp.Columns.Add("NOMREF_REF");
                    dtImp.Columns.Add("CODCOL_DOP");
                    dtImp.Columns.Add("NOMCOL_COL");
                    dtImp.Columns.Add("CANPED");
                    dtImp.Columns.Add("CANENT");
                    dtImp.Columns.Add("CANPEN");
                    dtImp.Columns.Add("ULTENT_TMP");
                    dtImp.Columns.Add("CALIF");
                    dtImp.Columns.Add("ORDEN");

                    DataRow dr;
                    foreach (VmCumplimientoPedidos i in lisCumplimientoPedidos)
                    {
                        dr = dtImp.NewRow();
                        dr["CODCLI_EOP"] = i.CODCLI_EOP;
                        dr["NOMCLI_CLI"] = i.NOMCLI_CLI;
                        dr["NROPED_EOP"] = i.NROPED_EOP;
                        dr["NROORD_DOP"] = i.NROORD_DOP;
                        dr["FECPED_TMP"] = i.FECPED_TMP;
                        dr["FECENT_TMP"] = i.FECENT_TMP;
                        dr["DIAS"] = i.DIAS;
                        dr["CODREF_DOP"] = i.CODREF_DOP;
                        dr["NOMREF_REF"] = i.NOMREF_REF;
                        dr["CODCOL_DOP"] = i.CODCOL_DOP;
                        dr["NOMCOL_COL"] = i.NOMCOL_COL;
                        dr["CANPED"] = i.CANPED;
                        dr["CANENT"] = i.CANENT;
                        dr["CANPEN"] = i.CANPEN;
                        dr["ULTENT_TMP"] = i.ULTENT_TMP;
                        dr["CALIF"] = i.CALIF;
                        dr["ORDEN"] = i.ORDEN;

                        dtImp.Rows.Add(dr);
                    }

                    DataSet ds = new DataSet("dsCumplimientoPedidos");

                    
                    ds.Tables.Add(dtImp);//Tabla
                    ds.Tables.Add(dtParametros);//Parametros

                    Vista vista = new Vista { ds = ds, reporte = @"reportes\rptCumplimientoPedidos.rpt" };
                    vista.Show();
                 }
                 catch (Exception ex) { MessageBox.Show(ex.Message); }
             }
        #endregion
    }

    public class VmCumplimientoPedidos : ViewModelBase
    {
        #region Campos
        private MCumplimientoPedidos _CumplimientoPedidos = new MCumplimientoPedidos();
        #endregion

        #region Constructor
            public VmCumplimientoPedidos(MCumplimientoPedidos CumplimientoPedidos)
            {
                _CumplimientoPedidos = CumplimientoPedidos;
            }
            public VmCumplimientoPedidos()
            { 
            
            }
        #endregion

        #region interfaces publicas (Propiedades)
            //FJRF - 1. CODIGO DEL CLIENTE
            public string CODCLI_EOP
            {
                get { return _CumplimientoPedidos.CODCLI_EOP; }
                set { _CumplimientoPedidos.CODCLI_EOP = value; base.OnPropertyChanged("CODCLI_EOP"); }
            }
            //FJRF - 2. NOMBRE DEL CLIENTE
            public string NOMCLI_CLI
            {
                get { return _CumplimientoPedidos.NOMCLI_CLI; }
                set { _CumplimientoPedidos.NOMCLI_CLI = value; base.OnPropertyChanged("NOMCLI_CLI"); }
            }
            //FJRF - 3. NUMERO DE PEDIDO
            public Int32 NROPED_EOP
            {
                get { return _CumplimientoPedidos.NROPED_EOP; }
                set { _CumplimientoPedidos.NROPED_EOP = value; base.OnPropertyChanged("NROPED_EOP"); }
            }
            //FJRF - 4. NUMERO ORDEN
            public string NROORD_DOP
            {
                get { return _CumplimientoPedidos.NROORD_DOP; }
                set { _CumplimientoPedidos.NROORD_DOP = value; base.OnPropertyChanged("NROORD_DOP"); }
            }
            //FJRF - 5. FECHA PEDIDO
            public DateTime FECPED
            {
                get { return _CumplimientoPedidos.FECPED; }
                set { _CumplimientoPedidos.FECPED = value; base.OnPropertyChanged("FECPED"); }
            }
            public string FECPED_TMP
            {
                get { return _CumplimientoPedidos.FECPED_TMP; }
                set { _CumplimientoPedidos.FECPED_TMP = value; base.OnPropertyChanged("FECPED_TMP"); }
            }
            //FJRF - 6. FECHA ENTREGA
            public DateTime FECENT
            {
                get { return _CumplimientoPedidos.FECENT; }
                set { _CumplimientoPedidos.FECENT = value; base.OnPropertyChanged("FECENT"); }
            }
            public string FECENT_TMP
            {
                get { return _CumplimientoPedidos.FECENT_TMP; }
                set { _CumplimientoPedidos.FECENT_TMP = value; base.OnPropertyChanged("FECENT_TMP"); }
            }
            //FJRF - 7. DIAS
            public Int32 DIAS
            {
                get { return _CumplimientoPedidos.DIAS; }
                set { _CumplimientoPedidos.DIAS = value; base.OnPropertyChanged("DIAS"); }
            }
            //FJRF - 8. CODIGO REFERENCIA
            public string CODREF_DOP
            {
                get { return _CumplimientoPedidos.CODREF_DOP; }
                set { _CumplimientoPedidos.CODREF_DOP = value; base.OnPropertyChanged("CODREF_DOP"); }
            }
            //FJRF - 9. CODIGO COLOR
            public string CODCOL_DOP
            {
                get { return _CumplimientoPedidos.CODCOL_DOP; }
                set { _CumplimientoPedidos.CODCOL_DOP = value; base.OnPropertyChanged("CODCOL_DOP"); }
            }
            //FJRF - 10. NOMBRE DE LA REFERENCIA
            public string NOMREF_REF
            {
                get { return _CumplimientoPedidos.NOMREF_REF; }
                set { _CumplimientoPedidos.NOMREF_REF = value; base.OnPropertyChanged("NOMREF_REF"); }
            }
            //FJRF - 11. NOMBRE DEL COLOR
            public string NOMCOL_COL
            {
                get { return _CumplimientoPedidos.NOMCOL_COL; }
                set { _CumplimientoPedidos.NOMCOL_COL = value; base.OnPropertyChanged("NOMCOL_COL"); }
            }
            //FJRF - 12. CANTIDAD PEDIDA
            public Int32 CANPED
            {
                get { return _CumplimientoPedidos.CANPED; }
                set { _CumplimientoPedidos.CANPED = value; base.OnPropertyChanged("CANPED"); }
            }
            //FJRF - 13. CANTIDAD ENTREGADA
            public Int32 CANENT
            {
                get { return _CumplimientoPedidos.CANENT; }
                set { _CumplimientoPedidos.CANENT = value; base.OnPropertyChanged("CANENT"); }
            }
            //FJRF - 14. CANTIDAD PENDIENTE
            public Int32 CANPEN
            {
                get { return _CumplimientoPedidos.CANPEN; }
                set { _CumplimientoPedidos.CANPEN = value; base.OnPropertyChanged("CANPEN"); }
            }
            //FJRF - 15. FECHA ULTIMA ENTREGA
            public DateTime ULTENT
            {
                get { return _CumplimientoPedidos.ULTENT; }
                set { _CumplimientoPedidos.ULTENT = value; base.OnPropertyChanged("ULTENT"); }
            }
            public string ULTENT_TMP
            {
                get { return _CumplimientoPedidos.ULTENT_TMP; }
                set { _CumplimientoPedidos.ULTENT_TMP = value; base.OnPropertyChanged("ULTENT_TMP"); }
            }
            //FJRF - 16. CALIFICACION
            public string CALIF
            {
                get { return _CumplimientoPedidos.CALIF; }
                set { _CumplimientoPedidos.CALIF = value; base.OnPropertyChanged("CALIF"); }
            }
            //FJRF - 17. ORDEN DE LOS CAMPOS
            public Int32 ORDEN
            {
                get { return _CumplimientoPedidos.ORDEN; }
                set { _CumplimientoPedidos.ORDEN = value; base.OnPropertyChanged("ORDEN"); }
            }
            //---------------------------------------------------------------------------------
            private bool _logRepiteCliente;
            public bool logRepiteCliente
            {
                get { return _logRepiteCliente; }
                set { _logRepiteCliente = value; base.OnPropertyChanged("logRepiteCliente"); }
            }

            private bool _logRepiteReferencia;
            public bool logRepiteReferencia
            {
                get { return _logRepiteReferencia; }
                set { _logRepiteReferencia = value; base.OnPropertyChanged("logRepiteReferencia"); }
            }

            private bool _logRepiteColor;
            public bool logRepiteColor
            {
                get { return _logRepiteColor; }
                set { _logRepiteColor = value; base.OnPropertyChanged("logRepiteColor"); }
            }

            private bool _logRepiteOrden;
            public bool logRepiteOrden
            {
                get { return _logRepiteOrden; }
                set { _logRepiteOrden = value; base.OnPropertyChanged("logRepiteOrden"); }
            }
            private bool _logPendiente;
            public bool logPendiente
            {
                get { return _logPendiente; }
                set { _logPendiente = value; base.OnPropertyChanged("logPendiente"); }
            }
        #endregion

        #region Metodos
            public MCumplimientoPedidos getCumplimientoPedidos()
            {
                return _CumplimientoPedidos;
            }
        #endregion
    }
}
